package pe.gob.foncodes.spp.bs.dao;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.gob.foncodes.sgp.bs.commons.Constant;
import pe.gob.foncodes.spp.bs.domain.PortafolioFocalizacion;
import pe.gob.foncodes.spp.bs.domain.PortafolioFocalizacionId;

@Repository
public class PortafolioFocalizacionDAOImpl extends
		BaseDAO<PortafolioFocalizacion> implements PortafolioFocalizacionDAO {

	@Autowired
	public PortafolioFocalizacionDAOImpl(SessionFactory sessionFactory) {
		super(sessionFactory);
	}

	public void guardarPortafolioFocalizacion(
			PortafolioFocalizacion portafolioFocalizacion) {
		save(portafolioFocalizacion);
	}

	public List<PortafolioFocalizacion> buscarPortafolioFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito(
			String codAnho, String codZonal, String codDepartamento,
			String codProvincia, String codDistrito) {

		PortafolioFocalizacion portafolioFocalizacion;
		PortafolioFocalizacionId id;
		List<PortafolioFocalizacion> focalizaciones = new ArrayList<PortafolioFocalizacion>();
		StringBuilder queryString = new StringBuilder();
		queryString.append(" ");

		queryString.append(" SELECT B.COD_ANHO,B.COD_ZONAL,B.TXT_ZONAL, ");
		queryString.append(" B.COD_DEPARTAMENTO,B.TXT_DEPARTAMENTO, ");
		queryString.append(" B.COD_PROVINCIA,B.TXT_PROVINCIA, ");
		queryString.append(" B.COD_DISTRITO,B.TXT_DISTRITO, ");
		queryString
				.append(" B.COD_CENTRO_POBLADO, B.TXT_CENTRO_POBLADO ,B.NID_SUB_TIPO_PROYECTO,B.FLG_ACTIVO,B.FLG_NUEVO_CCPP,B.FEC_ASIGNACION ");
		queryString.append(" FROM ");
		queryString.append(Constant.ESQUEMA
				+ ".PORTAFOLIO_FOCALIZACION_VIEW B ");

		if (codZonal != null && !"".equals(codZonal)) {
			queryString.append(" AND B.COD_ZONAL = '" + codZonal + "'");
		}

		if (codDepartamento != null && !"".equals(codDepartamento)) {
			queryString.append(" AND B.COD_DEPARTAMENTO = '" + codDepartamento
					+ "'");
		}

		if (codProvincia != null && !"".equals(codProvincia)) {
			queryString.append(" AND B.COD_PROVINCIA = '" + codProvincia + "'");
		}

		if (codDistrito != null && !"".equals(codDistrito)) {
			queryString.append(" AND B.COD_DISTRITO = '" + codDistrito + "'");
		}

		List<Object> lista = findByNativeQuery(queryString);
		Object[] aux;
		for (Object object : lista) {
			aux = (Object[]) object;

			id = new PortafolioFocalizacionId(new Long(
					((BigDecimal) aux[11]).intValue()), (String) aux[1],
					(String) aux[3], (String) aux[5], (String) aux[7], "05",
					new Long(((BigDecimal) aux[11]).intValue()),
					(String) aux[9], (String) aux[0]);

			portafolioFocalizacion = new PortafolioFocalizacion(id, new Long(
					((BigDecimal) aux[12]).intValue()), new Long(
					((BigDecimal) aux[13]).intValue()), (Date) aux[14],
					(String) aux[2], (String) aux[4], (String) aux[6],
					(String) aux[8], (String) aux[10]);

			focalizaciones.add(portafolioFocalizacion);
		}

		return focalizaciones;
	}

	public PortafolioFocalizacion actualizarPortafolioFocalizacion(
			PortafolioFocalizacion portafolioFocalizacion) {

		return update(portafolioFocalizacion);
	}

}
